/**
 * @description 业务层 用户处理的方法这里只是写对应的查询操作， 不做业务的处理
 * @author 宫彦胜
 */

const { User } = require('../db/model')
const { formatUser } = require('./_format')


async function getUserInfo(userName,password){
  // 定义一个查询条件对象
  const whereOpt = {
    userName
  }
  // 如果有password 就代表是要登录
  if(password){
    Object.assign(whereOpt, {password})
  }
  const user = await User.findOne({
    where: whereOpt,
    attributes: ['id', 'userName', 'password', 'nickName', 'gender', 'city', 'picture']
  })
  if(user === null){
    return null
  }

  // 来格式化一下用户数据
  return formatUser(user)
}

/**
 * @description 创建用户信息
 * @param {string} userName 用户名
 * @param {string} password 密码
 * @param {number} gender 性别(1男,2女,3保密)
 * @param {string} nickName 昵称
 */
async function createUser({ userName, password, gender=3, nickName }){
  const result = await User.create({
    userName,
    password,
    gender,
    nickName: nickName || userName
  })
  // 返回用户， 创建的用户信息
  return result
}

/**
 * 删除用户
 * @param {string} userName 用户名
 */
async function deleteUser(userName){
  // destroy 返回的是删除的条数
  const res = await User.destroy({
    where: {
      userName
    }
  })
  return res > 0
}

module.exports = {
  createUser,
  getUserInfo,
  deleteUser
}
